import {
  getLoginUserInfo
} from './api/user';
// ES6中的模块化
// 普通导入
import amodule, {
  a
} from './utils/amodule';
console.log(a);
console.log(amodule.name);
// 导入
const bmodule = require("./utils/bmodule");
console.log(bmodule.name);
console.log(bmodule.text);

// app.js
App({
  // 小程序第一启动到时候会执行的生命周期函数
  onLaunch() {
    // 在小程序第一次启动的时候，需要做的操作可以放在这里
    console.log("小程序启动起来了");


    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })

    // 每次一打开app的时候校验一下登陆状态
    // 隐患在于getLoginUserInfo这是一个一步操作
    // 开发过程中出现这种情况，一会行一会不行了
    // 回调函数
    // promise
    // 第一种方式
    //    1. 回调函数
    // setTimeout(()=>{
    //   getLoginUserInfo().then(res=>{
    //     console.log(res);
    //     // 请求到数据之后
    //     this.finish = true;
    //     if(this.globalData.callback != null ){
    //       // 告诉设置回调函数的地方，我们请求成功了
    //       this.globalData.callback(res);
    //     }
    //   })
    // },3000)

    // this.globalData.userInfoPromise = new Promise((reslove)=>{
    //   setTimeout(() => {
    //     getLoginUserInfo().then(res=>{
    //       reslove(res)
    //     })
    //   }, 3000);
    // });
    // 解决接口请求的异步问题，依赖的Promise对象， 通过这个Promise对象判断请求是成功还是失败
    this.globalData.userInfoPromise = getLoginUserInfo()
  },
  // 小程序被展示出来的时候会触发的
  onShow() {
    // 小程序后续被展示出来之后会执行
    console.log("小程序展示出来了");
  },
  onHide() {
    // 当小程序进入后台的时候会执行。
    console.log("小程序隐藏了");
  },
  onError(msg) {
    // 在小程序运行过程中出现错误的时候会执行这个函数
    // 进行统一错误里
  },
  // 设置一些全局的数据
  // 如何获取app实例,类似与vuex的作用
  // 不会响应式更新
  globalData: {
    userInfo: null,
    // 登陆状态
    isLogin: false,
    // 系统到用户信息
    user: null,
    title: "全局标题",
    callback: null,
    finish: false,
    userInfoPromise: null
  },
  test: "测试一下"
})